package com.jinhongone.pattern.behavior.memento.black_memento;

/**
 * 游戏角色类（发起人角色）
 */
public class GameRole {
    private int vit; //生命力
    private int atk; //攻击力
    private int def; //防御力

    //初始状态
    public void initState() {
        this.vit = 100;
        this.atk = 100;
        this.def = 100;
    }

    //战斗后状态
    public void fight() {
        this.vit = 0;
        this.atk = 0;
        this.def = 0;
    }

    //展示当前状态
    public void stateDisplay() {
        System.out.println("当前生命值：" + this.vit);
        System.out.println("当前攻击力：" + this.atk);
        System.out.println("当前防御力：" + this.def);
    }

    //状态保持
    public Memento saveState() {
        return new RoleStateMemento(this.vit, this.atk, this.def);
    }

    //恢复状态
    public void recoverState(Memento memento) {
        RoleStateMemento roleState = (RoleStateMemento) memento;
        this.vit = roleState.getVit();
        this.atk = roleState.getAtk();
        this.def = roleState.getDef();
    }

    public GameRole() {
    }

    /**
     * 通过将memento接口的实现类定义在发起人类中，且定义为private，可以做到只有发起人能看到备忘录中的信息（宽接口），
     * 其他角色仅能获取保存的目的（窄接口），从而实现了宽窄接口的功能。
     */
    private class RoleStateMemento implements Memento {
        private int vit; //生命力
        private int atk; //攻击力
        private int def; //防御力

        public RoleStateMemento(int vit, int atk, int def) {
            this.vit = vit;
            this.atk = atk;
            this.def = def;
        }

        public int getVit() {
            return vit;
        }

        public int getAtk() {
            return atk;
        }

        public int getDef() {
            return def;
        }
    }


}
